#include <stdio.h>

typedef int ElemType;
#define MAXSIZE 50

//用数组来实现栈
typedef struct
{
    ElemType data[MAXSIZE];
    int top;
}Stack;

//初始化栈
void stack_init(Stack &st)
{
    st.top=-1;
}

//判断栈是否为空
bool stack_empty(Stack &st)
{
    if(-1==st.top)
    {
        return true;
    }
    return false;
}

//入栈
bool stack_push(Stack &st,ElemType x)
{
    //判断栈是否已满
    if(MAXSIZE-1 == st.top)
    {
        return false;
    }
    //存入数据
    st.data[++st.top]=x;
    return true;
}

//出栈
bool stack_pop(Stack &st,ElemType &m)
{
    //判断是否为空
    if(stack_empty(st))
    {
        return false;
    }
    m=st.data[st.top];
    --st.top;
    return true;
}

//获取栈顶元素
bool get_stack_top(Stack &st,ElemType &x)
{
    //判断是否为空
    if(stack_empty(st))
    {
        return false;
    }
    x=st.data[st.top];
    return true;
}

int main() {
    //创建栈
    Stack st;
    //初始化栈
    stack_init(st);
    //入栈
    bool flag;

    stack_push(st,1);
    stack_push(st,2);
    stack_push(st,3);
    flag=stack_push(st,4);
    if(flag)
    {
        printf("successful push!\n");
    }

    //获取栈顶元素
    ElemType m;
    flag= get_stack_top(st,m);
    if(flag)
    {
        printf("stack_top_value is :%d\n",m);
    }

    ElemType x;
    //出栈
    flag=stack_pop(st,x);
    if(flag)
    {
        printf("successful pop!\n");
    }

    return 0;
}
